# -*- coding: utf-8 -*-
# 从redis读取图书详情地址，爬取图书信息并存入redis
import scrapy
from salve.items import BookItem
from scrapy_redis.spiders import RedisSpider
import re,redis

class BookSpider(RedisSpider):
    name = 'book'
    allowed_domains = ['book.douban.com']
    redis_key = "book:start_urls"
    r=redis.Redis(host='localhost',port=6379,decode_responses=True)

    def __init__(self,*args,**kwargs):
        domain=kwargs.pop('domain','')
        self.allowed_domains=filter(None,domain.split(','))
        super(BookSpider,self).__init__(*args,**kwargs)

    def parse(self, response):
        print("response==================",response.status)
        try:
            '''解析图书信息'''
            item=BookItem()
            content=response.css("#wrapper")
            # ID号
            item["id"]=content.re_first('id="collect_form_([0-9]+)"')
            # 标题
            titles=content.css("h1 span::text")
            if titles:
                item["title"]=titles.extract_first()
            info=content.css("#info").extract_first()
            #作者
            authors=re.search('<span.*?>\s*作者.*?</span>(.*?)<br.*?>',info,re.S)
            if authors:
                authors=authors.group(1)
                item["author"]="、".join(re.findall('<a.*?>\s*(.*?)</a>',authors,re.S))
            #出版社
            presses=re.search('<span.*?>\s*出版社.*?</span>(.*?)<br.*?>',info,re.S)
            if presses:
                item["press"]=presses.group(1).strip(" ").strip(":")
            #原作名
            original=re.search('<span.*?>\s*原作名.*?</span>(.*?)<br.*?>',info,re.S)
            if original:
                item["original"]=original.group(1).strip(" ").strip(":")
            #译者
            translators=re.search('<span.*?>\s*译者.*?</span>(.*?)<br.*?>',info,re.S)
            if translators:
                translators=translators.group(1)
                item["translator"]="、".join(re.findall('<a.*?>\s*(.*?)</a>',translators,re.S))
            #出版年
            imprints=re.search('<span.*?>\s*出版年.*?</span>\s*(.*?)<br.*?>',info,re.S)
            if imprints:
                item["imprint"]=imprints.group(1).strip(" ").strip(":")
            #页数
            pages=re.search('<span.*?>\s*页数.*?</span>.*?([0-9]+).*?<br.*?>',info,re.S)
            if pages:
                item["pages"]=pages.group(1).strip(" ").strip(":")
            #定价
            price=re.search('<span.*?>\s*定价.*?</span>.*?([0-9\.]+)元?<br.*?>',info,re.S)
            print("价格：",price)
            if price:
                item["price"]=price.group(1).strip(" ").strip(":")
            #装帧
            binding=re.search('<span.*?>\s*装帧.*?</span>(.*?)<br.*?>',info,re.S)
            if binding:
                item["binding"]=binding.group(1).strip(" ").strip(":")
            #丛书
            series=re.search('<span.*?>\s*丛书.*?</span>(.*?)<br.*?>',info,re.S)
            if series:
                series=series.group(1)
                item["series"]="、".join(re.findall('<a.*?>(.*?)</a>',series,re.S))
            #ISBN
            isbn=re.search('<span.*?>\s*ISBN.*?</span>.*?([0-9]+).*?<br.*?>',info,re.S | re.I)
            if isbn:
                item["isbn"]=isbn.group(1).strip(" ").strip(":")
            scorev=content.css("#interest_sectl")
            #评分
            scores=scorev.css("strong.rating_num::text")
            if scores:
                item["score"]=scores.extract_first().strip(" ")
            #评论人数
            number=scorev.css(".rating_sum a.rating_people span::text")
            if number:
                item["number"]=number.extract_first()
            print(item)
            yield item
        except:
            self.r.lpush('book:start_urls_err',response.url)
